package ac.zlf.springmybatis.service;

import ac.zlf.springmybatis.base.entity.User;
import ac.zlf.springmybatis.domain.AmenuBean;
import ac.zlf.springmybatis.core.mybatis.domain.Page;
import ac.zlf.springmybatis.core.mybatis.domain.PageRequest;
import ac.zlf.springmybatis.vo.MenuVo;

import java.util.List;


/**
 * <p>Project: bee-projects</p>
 * <p>Title: AmenuService.java</p>
 * <p>Description:   </p>
 * <p>Copyright: Copyright (c) 2016 </p>
 * <p>Company: 华炜云商科技有限公司 www.hwtech.cc</p>
 *
 * @author zh
 * @version 1.0
 * @date 2017-03-09
 */
public interface AmenuService {

    /**
     * 通过ID查找bean
     * @param id        [必填] ID
     * @param aId       [非必填] 操作用户ID。不null，查询指定用户的信息；为null，不现在用户ID
     * @return          如果能查询到，返回bean对象；如果查询不到，返回null
     */
    public AmenuBean findBeanById(Integer id, Integer aId);

    /**
     * 通过ID查找一个可用的bean
     * @param id        [必填] ID
     * @param aId       [非必填] 操作用户ID。不null，查询指定用户的信息；为null，不现在用户ID
     * @return          如果能查询到，且bean可用(状态等条件正常)，返回bean对象；查询不到，抛异常；
     */
    public AmenuBean findAvailableBeanById(Integer id, Integer aId);

    /**
     * 分页查找
     * @param pageRequest        [必填] PageRequest对象
     * @param amenuBean        非必填，分页条件
     * @param aId                [非必填] 操作用户ID。不null，查询指定用户的信息；为null，不现在用户ID
     * @return                   分页对象
     */
    public Page<AmenuBean> findBeanPage(PageRequest pageRequest, AmenuBean amenuBean, Integer aId);

    /**
     * 查找所有指定条件对象
     * @param amenuBean        [必填] 查询条件
     * @param aId                [非必填] 操作用户ID。不null，查询指定用户的信息；为null，不现在用户ID
     * @return                   满足条件的对象集合
     */
    public List<AmenuBean> findBeanAll(AmenuBean amenuBean, Integer aId);

    /**
     * 新增
     * @param amenuBean        [必填] 对象信息
     * @param user               [必填] 当操作用户
     */
    public void doAdd(AmenuBean amenuBean, User user);

    /**
     * 编辑
     * @param amenuBean        [必填] 对象信息
     * @param user               [必填] 当操作用户
     */
    public void doUpdate(AmenuBean amenuBean, User user);

    /**
     * 软删除
     * @param id        [必填] ID
     * @param user      [必填] 当操作用户
     */
    public void doDel(Integer id, User user);

    /**
     * 硬删除
     * @param id        [必填] ID
     * @param user      [必填] 当操作用户
     */
    public void doDelete(Integer id, User user);

    /**
     * 获取主页菜单
     *
     * @param user
     * @return
     */
    public MenuVo getMenu(User user);
}